Booting is the process by which software (usually the operating system) is loaded into the memory of a computer and begins execution. Booting may also include loading a software image and starting software instances such as accounting or mail daemons. Usually, booting is done when the computer is turned on. Different computer systems can boot in different fashions. For example, most PCs are able to boot their operating system from a disk containing the required booting software and many embedded systems are able to boot from a pre-configured boot ROM. One type of network organization method involves using diskless workstations attached to a server that contains software programs and data. Diskless workstations are able to boot from a network using a connection protocol such as the TCP/IP protocol suite and download the programs in order to run them remotely. In these systems the elements of the TCP/IP protocol suite must also be fetched from a remote source and the booting is usually done from an IP network.
In a typical system, when a computer is first turned on, code present in a boot ROM is executed. Typically this code directs the computer to check for hardware components to ensure no essential components are lacking in the system. The boot ROM code then proceeds in loading up the operating system software. In the majority of computer systems, the booting procedure is hard-coded. For instance, a computer that boots from its hard disk always boots from its hard disk and one that boots from a network always boots from a network. Modifying the booting procedure involves reprogramming the boot ROM. Therefore if the hard drive of computer that boots from its hard drive fails, the computer cannot start although the same software could be available from the network. The reverse is also true for a computer that usually boots from the network when the latter fails.
Thus, there exists a need in the industry to provide an improved method for booting a computer such as to allow greater flexibility and to permit a computer to selectively boot from either its non-volatile memory unit or from a remote location, such as from a network.